package Modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.Temporal;

@Entity
public class Encuesta implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nombre;
    private String descripcion;
    private String mensaje;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fecha;
    @OneToMany(cascade = CascadeType.PERSIST)
    private List<Pregunta> preguntas;

    public Encuesta() {
	preguntas = new ArrayList<Pregunta>();
    }

    public Encuesta(String nombre) {
        this.nombre = nombre;
        preguntas = new ArrayList<Pregunta>();
    }

    public Encuesta(String nombre, String descripcion, String mensaje, Date fecha) {
        this.nombre = nombre;
        this.descripcion = descripcion;
        this.mensaje = mensaje;
        this.fecha = fecha;
        this.preguntas = new ArrayList<Pregunta>();

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public String getEncuestaCorta() {
        if (this.nombre.length() > 40) {
            String ec = this.nombre.substring(1, 40);
            ec += "..";
            return ec;
        }
        return nombre;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public List<Pregunta> getPreguntas() {
        return preguntas;
    }

    public void setPreguntas(List<Pregunta> preguntas) {
        this.preguntas = preguntas;
    }

    public void addPreguntas(Pregunta p) {
        preguntas.add(p);
    }

    public void asignarP(Long id, Long idp) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        Encuesta e = em.find(Encuesta.class, id);
        Pregunta p = em.find(Pregunta.class, idp);
        e.addPreguntas(p);
        em.getTransaction().begin();
        em.persist(e);
        em.getTransaction().commit();
        em.close();
        emf.close();
    }

    public Long agregarE(String nombre, String des, String men, Date fecha) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        Encuesta en = new Encuesta(nombre, des, men, fecha);
        em.getTransaction().begin();
        em.persist(en);
        em.getTransaction().commit();
        Query q = em.createQuery("select Max(c.id) from Encuesta c");
        return (Long) q.getSingleResult();
    }



    public List getLista() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createQuery("SELECT e FROM Encuesta e");
        return q.getResultList();
    }

    public void Eliminar(Long id) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        Encuesta p = em.find(Encuesta.class, id);
        em.getTransaction().begin();
        em.remove(p);
        em.getTransaction().commit();
        em.close();
        emf.close();

    }

    public void Eliminartoo(Long idenc) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        Encuesta p = em.find(Encuesta.class, idenc);
        p.getPreguntas().clear();
        em.getTransaction().begin();
        em.persist(p);
        em.getTransaction().commit();
        em.close();
        emf.close();
    }

    public Encuesta buscar(Long id) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        Encuesta p = em.find(Encuesta.class, id);
        em.close();
        emf.close();
        return p;
    }

    public List getListaPre(Long id) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        Encuesta p = em.find(Encuesta.class, id);
        em.close();
        emf.close();
        return p.getPreguntas();
    }

    public void actualizar(Long id, String nombre, String des, String men, Date fecha) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        Encuesta p = em.find(Encuesta.class, id);
        em.getTransaction().begin();
        p.setNombre(nombre);
        p.setDescripcion(des);
        p.setMensaje(men);
        p.setFecha(fecha);
       // em.merge(p);
        em.getTransaction().commit();
        em.close();
        emf.close();
    }

    public void actualizarEncuesta(Encuesta en) {



        EntityManagerFactory emf = Persistence.createEntityManagerFactory(
                "APU");

        // Crear el EntityManager para accesso a la capa de persistencia
        EntityManager em = emf.createEntityManager();
        // Se es transacciÃƒÆ’Ã†â€™Ãƒâ€ Ã¢â‚¬â„¢ÃƒÆ’Ã¢â‚¬Å¡Ãƒâ€šÃ‚Â³n de escritura, obtener la transacciÃƒÆ’Ã†â€™Ãƒâ€ Ã¢â‚¬â„¢ÃƒÆ’Ã¢â‚¬Å¡Ãƒâ€šÃ‚Â³n
        // del EntityManager e iniciarla
        em.getTransaction().begin();

        // Marcar el registro en la base de datos
        em.merge(en);

        // Ejecutar la transacciÃƒÆ’Ã†â€™Ãƒâ€ Ã¢â‚¬â„¢ÃƒÆ’Ã¢â‚¬Å¡Ãƒâ€šÃ‚Â³n
        em.getTransaction().commit();

    }
    public List fndAllPetsByName(String petName) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        Query q = em.createNativeQuery(petName, Encuesta.class);
        return q.getResultList();
    }
    public List EncuestaMia(String idfuente,String idp){
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
     EntityManager em = emf.createEntityManager();
     Fuente f= em.find(Fuente.class, Long.parseLong(idfuente));
     Proyecto p= em.find(Proyecto.class, Long.parseLong(idp));
     //SELECT ALL p_e_f.`ID`, p_e_f.`ENCUESTA_ID`, p_e_f.`FUENTE_ID`, p_e_f.`PROYECTO_ID`  FROM p_e_f INNER JOIN encuesta ON p_e_f.`ENCUESTA_ID` = encuesta.`ID` WHERE p_e_f.`FUENTE_ID` = ? AND p_e_f.`PROYECTO_ID` = ?
     Query q = em.createQuery("SELECT e FROM P_E_F pef Join pef.encuesta e WHERE pef.proyecto=:pr and pef.fuente=:fu");
     q.setParameter("pr",p);
     q.setParameter("fu",f);
     return q.getResultList();

    }

   


}